home *** CD-ROM | disk | FTP | other *** search
/ C++ für Kids / C++ for kids.iso / SETUP / US / CBUILDER / DATA.Z / IMAGEHLP.H < prev    next >
C/C++ Source or Header  |  1997-02-13  |  24KB  |  937 lines

  1. /*++ BUILD Version: 0001     Increment this if a change has global effects
  2.  
  3. Copyright (c) 1993-1996  Microsoft Corporation
  4.  
  5. Module Name:
  6.  
  7.     imagehlp.h
  8.  
  9. Abstract:
  10.  
  11.     This module defines the prptotypes and constants required for the image
  12.     help routines.
  13.  
  14. Revision History:
  15.  
  16. --*/
  17.  
  18. #ifndef _IMAGEHLP_
  19. #define _IMAGEHLP_
  20. #pragma option -b
  21.  
  22. #ifdef __cplusplus
  23. extern "C" {
  24. #endif
  25.  
  26. #ifdef __BORLANDC__
  27. #pragma option -b.
  28.   #include <pshpack8.h>
  29. #pragma option -b
  30. #endif
  31.  
  32. //
  33. // Define checksum return codes.
  34. //
  35.  
  36. #define CHECKSUM_SUCCESS            0
  37. #define CHECKSUM_OPEN_FAILURE       1
  38. #define CHECKSUM_MAP_FAILURE        2
  39. #define CHECKSUM_MAPVIEW_FAILURE    3
  40. #define CHECKSUM_UNICODE_FAILURE    4
  41.  
  42. // Define Splitsym flags.
  43.  
  44. #define SPLITSYM_REMOVE_PRIVATE     0x00000001      // Remove CV types/symbols and Fixup debug
  45.                                                     //  Used for creating .dbg files that ship
  46.                                                     //  as part of the product.
  47.  
  48. #define SPLITSYM_EXTRACT_ALL        0x00000002      // Extract all debug info from image.
  49.                                                     //  Normally, FPO is left in the image
  50.                                                     //  to allow stack traces through the code.
  51.                                                     //  Using this switch is similar to linking
  52.                                                     //  with -debug:none except the .dbg file
  53.                                                     //  exists...
  54.  
  55. #ifdef _IMAGEHLP_SOURCE_
  56. #define IMAGEAPI __stdcall
  57. #else
  58. #define IMAGEAPI DECLSPEC_IMPORT __stdcall
  59. #endif
  60.  
  61. //
  62. // Define checksum function prototypes.
  63. //
  64.  
  65. PIMAGE_NT_HEADERS
  66. IMAGEAPI
  67. CheckSumMappedFile (
  68.     LPVOID BaseAddress,
  69.     DWORD FileLength,
  70.     LPDWORD HeaderSum,
  71.     LPDWORD CheckSum
  72.     );
  73.  
  74. DWORD
  75. IMAGEAPI
  76. MapFileAndCheckSumA (
  77.     LPSTR Filename,
  78.     LPDWORD HeaderSum,
  79.     LPDWORD CheckSum
  80.     );
  81.  
  82. DWORD
  83. IMAGEAPI
  84. MapFileAndCheckSumW (
  85.     PWSTR Filename,
  86.     LPDWORD HeaderSum,
  87.     LPDWORD CheckSum
  88.     );
  89.  
  90. #ifdef UNICODE
  91. #define MapFileAndCheckSum  MapFileAndCheckSumW
  92. #else
  93. #define MapFileAndCheckSum  MapFileAndCheckSumA
  94. #endif // !UNICODE
  95.  
  96.  
  97. BOOL
  98. IMAGEAPI
  99. TouchFileTimes (
  100.     HANDLE FileHandle,
  101.     LPSYSTEMTIME lpSystemTime
  102.     );
  103.  
  104. BOOL
  105. IMAGEAPI
  106. SplitSymbols (
  107.     LPSTR ImageName,
  108.     LPSTR SymbolsPath,
  109.     LPSTR SymbolFilePath,
  110.     DWORD Flags                 // Combination of flags above
  111.     );
  112.  
  113. HANDLE
  114. IMAGEAPI
  115. FindDebugInfoFile (
  116.     LPSTR FileName,
  117.     LPSTR SymbolPath,
  118.     LPSTR DebugFilePath
  119.     );
  120.  
  121. HANDLE
  122. IMAGEAPI
  123. FindExecutableImage(
  124.     LPSTR FileName,
  125.     LPSTR SymbolPath,
  126.     LPSTR ImageFilePath
  127.     );
  128.  
  129. BOOL
  130. IMAGEAPI
  131. UpdateDebugInfoFile(
  132.     LPSTR ImageFileName,
  133.     LPSTR SymbolPath,
  134.     LPSTR DebugFilePath,
  135.     PIMAGE_NT_HEADERS NtHeaders
  136.     );
  137.  
  138. BOOL
  139. IMAGEAPI
  140. UpdateDebugInfoFileEx(
  141.     LPSTR ImageFileName,
  142.     LPSTR SymbolPath,
  143.     LPSTR DebugFilePath,
  144.     PIMAGE_NT_HEADERS NtHeaders,
  145.     DWORD OldChecksum
  146.     );
  147.  
  148. BOOL
  149. IMAGEAPI
  150. BindImage(
  151.     IN LPSTR ImageName,
  152.     IN LPSTR DllPath,
  153.     IN LPSTR SymbolPath
  154.     );
  155.  
  156. typedef enum _IMAGEHLP_STATUS_REASON {
  157.     BindOutOfMemory,
  158.     BindRvaToVaFailed,
  159.     BindNoRoomInImage,
  160.     BindImportModuleFailed,
  161.     BindImportProcedureFailed,
  162.     BindImportModule,
  163.     BindImportProcedure,
  164.     BindForwarder,
  165.     BindForwarderNOT,
  166.     BindImageModified,
  167.     BindExpandFileHeaders,
  168.     BindImageComplete,
  169.     BindMismatchedSymbols,
  170.     BindSymbolsNotUpdated
  171. } IMAGEHLP_STATUS_REASON;
  172.  
  173. typedef
  174. BOOL
  175. (__stdcall *PIMAGEHLP_STATUS_ROUTINE)(
  176.     IMAGEHLP_STATUS_REASON Reason,
  177.     LPSTR ImageName,
  178.     LPSTR DllName,
  179.     ULONG Va,
  180.     ULONG Parameter
  181.     );
  182.  
  183.  
  184. BOOL
  185. IMAGEAPI
  186. BindImageEx(
  187.     IN DWORD Flags,
  188.     IN LPSTR ImageName,
  189.     IN LPSTR DllPath,
  190.     IN LPSTR SymbolPath,
  191.     IN PIMAGEHLP_STATUS_ROUTINE StatusRoutine
  192.     );
  193.  
  194. #define BIND_NO_BOUND_IMPORTS 0x00000001
  195. #define BIND_NO_UPDATE        0x00000002
  196. #define BIND_ALL_IMAGES       0x00000004
  197.  
  198. BOOL
  199. IMAGEAPI
  200. ReBaseImage(
  201.     IN     LPSTR CurrentImageName,
  202.     IN     LPSTR SymbolPath,
  203.     IN     BOOL  fReBase,          // TRUE if actually rebasing, false if only summing
  204.     IN     BOOL  fRebaseSysfileOk, // TRUE is system images s/b rebased
  205.     IN     BOOL  fGoingDown,       // TRUE if the image s/b rebased below the given base
  206.     IN     ULONG CheckImageSize,   // Max size allowed  (0 if don't care)
  207.     OUT    ULONG *OldImageSize,    // Returned from the header
  208.     OUT    ULONG *OldImageBase,    // Returned from the header
  209.     OUT    ULONG *NewImageSize,    // Image size rounded to next separation boundary
  210.     IN OUT ULONG *NewImageBase,    // (in) Desired new address.
  211.                                    // (out) Next address (actual if going down)
  212.     IN     ULONG TimeStamp         // new timestamp for image, if non-zero
  213.     );
  214.  
  215. #define IMAGE_SEPARATION (64*1024)
  216.  
  217.  
  218. typedef struct _LOADED_IMAGE {
  219.     LPSTR                 ModuleName;
  220.     HANDLE                hFile;
  221.     PUCHAR                MappedAddress;
  222.     PIMAGE_NT_HEADERS     FileHeader;
  223.     PIMAGE_SECTION_HEADER LastRvaSection;
  224.     ULONG                 NumberOfSections;
  225.     PIMAGE_SECTION_HEADER Sections;
  226.     ULONG                 Characteristics;
  227.     BOOLEAN               fSystemImage;
  228.     BOOLEAN               fDOSImage;
  229.     LIST_ENTRY            Links;
  230.     ULONG                 SizeOfImage;
  231. } LOADED_IMAGE, *PLOADED_IMAGE;
  232.  
  233.  
  234. PLOADED_IMAGE
  235. IMAGEAPI
  236. ImageLoad(
  237.     LPSTR DllName,
  238.     LPSTR DllPath
  239.     );
  240.  
  241. BOOL
  242. IMAGEAPI
  243. ImageUnload(
  244.     PLOADED_IMAGE LoadedImage
  245.     );
  246.  
  247. PIMAGE_NT_HEADERS
  248. IMAGEAPI
  249. ImageNtHeader (
  250.     IN PVOID Base
  251.     );
  252.  
  253. PVOID
  254. IMAGEAPI
  255. ImageDirectoryEntryToData (
  256.     IN PVOID Base,
  257.     IN BOOLEAN MappedAsImage,
  258.     IN USHORT DirectoryEntry,
  259.     OUT PULONG Size
  260.     );
  261.  
  262. PIMAGE_SECTION_HEADER
  263. IMAGEAPI
  264. ImageRvaToSection(
  265.     IN PIMAGE_NT_HEADERS NtHeaders,
  266.     IN PVOID Base,
  267.     IN ULONG Rva
  268.     );
  269.  
  270. PVOID
  271. IMAGEAPI
  272. ImageRvaToVa(
  273.     IN PIMAGE_NT_HEADERS NtHeaders,
  274.     IN PVOID Base,
  275.     IN ULONG Rva,
  276.     IN OUT PIMAGE_SECTION_HEADER *LastRvaSection
  277.     );
  278.  
  279. BOOL
  280. IMAGEAPI
  281. MapAndLoad(
  282.     LPSTR ImageName,
  283.     LPSTR DllPath,
  284.     PLOADED_IMAGE LoadedImage,
  285.     BOOL DotDll,
  286.     BOOL ReadOnly
  287.     );
  288.  
  289. BOOL
  290. IMAGEAPI
  291. GetImageConfigInformation(
  292.     PLOADED_IMAGE LoadedImage,
  293.     PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
  294.     );
  295.  
  296. DWORD
  297. IMAGEAPI
  298. GetImageUnusedHeaderBytes(
  299.     PLOADED_IMAGE LoadedImage,
  300.     LPDWORD SizeUnusedHeaderBytes
  301.     );
  302.  
  303. BOOL
  304. IMAGEAPI
  305. SetImageConfigInformation(
  306.     PLOADED_IMAGE LoadedImage,
  307.     PIMAGE_LOAD_CONFIG_DIRECTORY ImageConfigInformation
  308.     );
  309.  
  310. BOOL
  311. IMAGEAPI
  312. UnMapAndLoad(
  313.    PLOADED_IMAGE LoadedImage
  314.    );
  315.  
  316. typedef struct _IMAGE_DEBUG_INFORMATION {
  317.     LIST_ENTRY List;
  318.     DWORD Size;
  319.     PVOID MappedBase;
  320.     USHORT Machine;
  321.     USHORT Characteristics;
  322.     DWORD CheckSum;
  323.     DWORD ImageBase;
  324.     DWORD SizeOfImage;
  325.  
  326.     DWORD NumberOfSections;
  327.     PIMAGE_SECTION_HEADER Sections;
  328.  
  329.     DWORD ExportedNamesSize;
  330.     LPSTR ExportedNames;
  331.  
  332.     DWORD NumberOfFunctionTableEntries;
  333.     PIMAGE_FUNCTION_ENTRY FunctionTableEntries;
  334.     DWORD LowestFunctionStartingAddress;
  335.     DWORD HighestFunctionEndingAddress;
  336.  
  337.     DWORD NumberOfFpoTableEntries;
  338.     PFPO_DATA FpoTableEntries;
  339.  
  340.     DWORD SizeOfCoffSymbols;
  341.     PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols;
  342.  
  343.     DWORD SizeOfCodeViewSymbols;
  344.     PVOID CodeViewSymbols;
  345.  
  346.     LPSTR ImageFilePath;
  347.     LPSTR ImageFileName;
  348.     LPSTR DebugFilePath;
  349.  
  350.     DWORD TimeDateStamp;
  351.  
  352.     BOOL  RomImage;
  353.     PIMAGE_DEBUG_DIRECTORY DebugDirectory;
  354.     DWORD NumberOfDebugDirectories;
  355.  
  356.     DWORD Reserved[ 3 ];
  357.  
  358. } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION;
  359.  
  360.  
  361. PIMAGE_DEBUG_INFORMATION
  362. IMAGEAPI
  363. MapDebugInformation (
  364.     HANDLE FileHandle,
  365.     LPSTR FileName,
  366.     LPSTR SymbolPath,
  367.     DWORD ImageBase
  368.     );
  369.  
  370. BOOL
  371. IMAGEAPI
  372. UnmapDebugInformation(
  373.     PIMAGE_DEBU